# -*- coding:utf-8 -*-

# @Time    : 2023/5/13 02:24
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : user_info_extract.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
from bot.insurance_consultant.agent.llm_agent import LLMAgent

default_template = """
作为一个专业的{role}，你需要从{role}和用户的对话记录中提取的用户情境。用户情境主要包括以下几种：
1.用户职业：除了常见职业外,还包括家庭主妇、工地工人、工厂工人、个体户、无业等
2.婚姻状态：已婚、未婚、离异。
3.是否有子女：有、无。有子女子女年纪。
4.生活习惯：抽烟、喝酒、熬夜、不运动、饮食外卖

注意事项:
1.输出格式：key-value格式，key为情境，value为情境的描述。情境和描述之间用"："分割，同一个情境的多个描述之间用"、"分割，多个情境之间用"\n"分割。
2.对于未提及的情境，无需例举出来。如果没有识别到任何情境，请直接返回"无情境"。
3.请根据与用户的对话记录，回答用户当前的情境和情境的描述，不需要回答用户的具体问题。

对话纪录：
===
{conversation_history}
===

已知用户信息
```
{user_info}
```
如果用户有提到年龄或城市，以用户说的为准。此外，需要你根据全部上下文对话记录，逐项逐步推理出所有需要识别的内容，未提及或未知的不要返回，在确保每项信息都没有遗漏,
且是用户明确表示的信息情况下，返回收集到用户确认的信息(而不是{role}表述的内容),
识别的用户情境:
"""


class UserInfoExtract(LLMAgent):

    def __init__(self, role, conversation_history, user_base_info):
        self.role = role
        if not conversation_history:
            conversation_history = []
        self.conversation_history = conversation_history

        self.prompt = default_template.format(role=self.role,
                                              conversation_history=self.conversation_history,
                                              user_info=user_base_info)
        super().__init__(self.prompt)


if __name__ == '__main__':
    user_info_extract = UserInfoExtract(role='保险规划师',
                                        conversation_history='我是做互联网的码农,已经有两个孩子',
                                        user_base_info='性别:男\n年龄:31\n城市:邯郸')
    result = user_info_extract.chat_with_azure()
    print(result)
